// Copyright (c) 2009-2010, Jeremy Brewer
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are met:
//
// * Redistributions of source code must retain the above copyright notice,
// this list of conditions and the following disclaimer.
// * Redistributions in binary form must reproduce the above copyright
// notice, this list of conditions and the following disclaimer in the
// documentation and/or other materials provided with the distribution.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
// POSSIBILITY OF SUCH DAMAGE.

package galaxie500.util;

import java.util.Arrays;

/**
 * Class for holding various utility functions.
 * 
 * TODO: documentation
 * 
 * @author Jeremy Brewer
 */
public class Util {
  public static double[] sortAndRemoveDuplicates(double[] array) {
    if (array.length <= 1) return array;
    Arrays.sort(array);
    
    int size = array.length;

    // Count the duplicates.
    for (int i = 0; i < array.length - 1;) {
      double elem = array[i];
      int j = i + 1;
      for (; j < array.length && array[j] == elem; j++) {
        size--;
      }
      i = j;
    }

    // No duplicates found.
    if (size == array.length) {
      return array;
    }
    
    // Create a new and copy over the elements.
    double[] copy = new double[size];
    int k = 0;
    
    for (int i = 0; i < array.length - 1; k++) {
      double elem = array[i];
      int j = i + 1;
      while (j < array.length && array[j] == elem) {
        j++;
      }
      copy[k] = elem;
      i = j;
    }
  
    return copy;
  }  
}
